package br.com.controlador;

import br.com.modelo.Caixa;
import br.com.modelo.Cidade;
import br.com.modelo.Empresa;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.JPAUtil;
import util.JSFUtil;

/**
 *
 * @author gilberto.costa
 */
@ManagedBean
@ViewScoped
public class EmpresaControler implements Serializable {

    private List<Empresa> listEmpresa = new ArrayList<Empresa>();
    private Empresa empresa;
    private List<Cidade> listCidades;
    private Boolean alterando = false;

    //controle
    @PostConstruct
    public void init() {
        setEmpresa(new Empresa());
        listEmpresa = Empresa.retornaEmpresas();
    }

    /**
     * @return the empresa
     */
    public Empresa getEmpresa() {
        return empresa;
    }

    /**
     * @param empresa the empresa to set
     */
    public void setEmpresa(Empresa empresa) {
        listCidades = Cidade.retornaCidadeDoEstado(empresa.getIdCidade().getEstado());
        //para que quando for editar carreguye a cidade no combo da cidade
        alterando = true;
        this.empresa = empresa;
    }

    public List<Empresa> retornaEmpresas() {
        return Empresa.retornaEmpresas();
    }

    /**
     * @return the listEmpresa
     */
    public List<Empresa> getListEmpresa() {
        return listEmpresa;
    }

    /**
     * @param listEmpresa the listEmpresa to set
     */
    public void setListEmpresa(List<Empresa> listEmpresa) {
        this.listEmpresa = listEmpresa;
    }

    public void inicializaObj() {
        alterando = false;
        empresa = new Empresa();
    }

    public void alterar() {
        alterando = false;
    }

    public void excluir() {
        try {
            empresa.excluir();
            listEmpresa = Empresa.retornaEmpresas();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Empresa excluida!!", "Mensagem"));
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    empresa.excluirCaixas(c.getIp());
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                }
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir empresa!!" + e, "Mensagem"));
        }
    }

    public void salvar() {
        try {
            empresa.setCnpj(empresa.getCnpj().replace(".", "").replace("/", "").replace("-", ""));
            empresa.setInscricaoEstadual(empresa.getInscricaoEstadual().replace(".", "").replace("-", ""));
            empresa.setCep(empresa.getCep().replace("-", ""));
            empresa.setFone(empresa.getFone().replace("(", "").replace(")", "").replace("-", "").replace(" ", ""));
            empresa.setFax(empresa.getFax().replace("(", "").replace(")", "").replace("-", "").replace(" ", ""));
            //cidade
            Cidade cid = Cidade.retornaCidadePorId(empresa.getIdCidade().getId());
            empresa.setCidade(cid.getCidade());
            empresa.setUf(cid.getEstado());
            empresa.setCodigoIbgeCidade(cid.getCodIBGE());
            empresa.setCodigoIbgeUf(cid.getCodIBGE().substring(0, 2));
            empresa.setIdEmpresa(empresa);
            empresa = empresa.salvar();
            JSFUtil.addMessageSucesso("Empresa salva!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    empresa = empresa.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgEmpresa.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageErro("Problema ao cadastrar a impressora!!" + e);
        }
    }

    public List<String> retornaEstados() {
        return Cidade.retornEstados();
    }

    public void carregaCidades() {
        listCidades = Cidade.retornaCidadeDoEstado(empresa.getIdCidade().getEstado());
    }

    /**
     * @return the listCidades
     */
    public List<Cidade> getListCidades() {
        return listCidades;
    }

    /**
     * @param listCidades the listCidades to set
     */
    public void setListCidades(List<Cidade> listCidades) {
        this.listCidades = listCidades;
    }

    public Boolean getAlterando() {
        return alterando;
    }

    public void setAlterando(Boolean alterando) {
        this.alterando = alterando;
    }
}
